import i18n from '@/lang'
// 验证邮箱
export const checkEmail = (rule, value, callback) => {
  const pattern = /^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\.[a-zA-Z]+)*\.[a-zA-Z]{2,6}$/
  if (!pattern.test(value)) {
    // eslint-disable-next-line callback-return
    callback(new Error(i18n.t('emailFormat')))
    return
  }
  callback()
}

// 验证手机号
export const checkPhone = (rule, value, callback) => {
  const pattern = /^1[3-9]\d{9}$/
  if (!pattern.test(value)) {
    // eslint-disable-next-line callback-return
    callback(new Error('请输入正确的手机号'))
    return
  }
  callback()
}

// 验证文本长度
export const checkTextLen = (len = 50, required = false) => {
  return function (rule, text, callback) {
    // eslint-disable-next-line no-param-reassign
    text += ''
    // eslint-disable-next-line no-param-reassign
    text = text.replace(/^\s+|\s+$/g, '')
    if (required && text.length === 0) {
      callback(new Error(i18n.t('pleaseInput')))
      return
    }
    if (text.length > len) {
      callback(new Error(i18n.t('textMaxLenTip').replace('__NUM__', len)))
      return
    }
    callback()
  }
}

// 验证文本长度
export const checkIsRangeText = (min = 1, max = 100) => {
  return function (rule, text, callback) {
    text += ''
    text = text.replace(/\s+|\n/g, '')
    const msg = '请输入X~Y个字符'.replace('X~Y', min + '~' + max)
    if (text.length < min || text.length > max) {
      callback(new Error(msg))
      return
    }
    callback()
  }
}

// 验证文本是x到y之间的整数
export const checkIsRangeInteger = (min = 1, max = 100) => {
  return function (rule, text, callback) {
    const val = text * 1
    const msg = i18n.t('rangeIntegerErrorTip').replace('X~Y', min + '~' + max)
    if (val < min || val > max) {
      callback(new Error(msg))
      return
    }
    if (!(/^[-]?\d+$/.test(text + ''))) {
      callback(new Error(msg))
      return
    }
    callback()
  }
}

// 验证版本名称 检测版本规则Vx.x.x 至少3段  每一段是由0~9组成，不限长度，总长度50
export const checkVersionName = (versionType, maxLen = 50) => {
  return function (rule, value, callback) {
    // 测试版本号由后台系统自动生成
    if(versionType === 'TEST'){
      callback()
      return
    }

    let val = value;
    const patter = /^V\d{1}.\d{1,2}.\d{1,2}$/
    const msg = i18n.t(`inputVersionNameTip`)
    if (!patter.test(val)) {
      callback(new Error(msg))
      return
    }
    if (val.length > maxLen) {
      callback(new Error(msg))
      return
    }
    callback()
  }
}

// 验证智驾域版本 （VDebug.b.c）b,c取值范围0~999
export const checkVersion = (maxLen = 14) => {
  return function (rule, value, callback) {
    const patter = /^VDebug\.\d{1,3}\.\d{1,3}$/
    const msg = '版本示例如VDebug.xxx.xxx(3段组成，每段由小数点符号连接，第一段为主版本号VDebug，第二第三段取值范围是0-999)'
    if (!patter.test(value)) {
      callback(new Error(msg))
      return
    }
    if (value.length > maxLen) {
      callback(new Error(msg))
      return
    }
    callback()
  }
}

// 验证版本名称 检测版本规则x.x.x 至少3段  每一段是由0~9组成，不限长度，总长度50
export const checkVersionNameWithOutV = (maxLen = 50) => {
  return function (rule, value, callback) {
    const patter = /^(\d+\.){2,}\d+$/
    const msg = i18n.t('inputVersionNameWithoutVTip')
    if (!patter.test(value)) {
      callback(new Error(msg))
      return
    }
    if (value.length > maxLen) {
      callback(new Error(msg))
      return
    }
    callback()
  }
}

// 只能输入正整数
export const checkIsPositiveInteger = () => {
  return function (rule, text, callback) {
    const val = text * 1
    const msg = i18n.t('inputPositiveIntegerTip')
    if ((/\D/.test(val))) {
      callback(new Error(msg))
      return
    }
    callback()
  }
}

// 只能输入正整数
export const checkInputRightAccountTip = () => {
  return function (rule, text, callback) {
    const val = text * 1
    const msg = i18n.t('inputRightAccountTip')
    if ((/\D/.test(val))) {
      callback(new Error(msg))
      return
    }
    callback()
  }
}
